package cn.fl.infside.service.impl;

import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.cmm.base.framework.context.ApplicationContextAccessor;
import cn.cmm.base.framework.utils.BaseLogUtils;
import cn.cmm.base.framework.utils.DateUtils;
import cn.cmm.base.framework.utils.DecimalUtils;
import cn.fl.infside.service.PayInfoInterface;
import cn.fl.infside.utils.ServiceXmlUtils;
import fl.inf.facade.api.IBFSApiService;
import fl.inf.facade.dto.InfBfsPayDTO;
import fl.inf.facade.dto.MessageDTO;

public class PayInfoServiceImpl implements PayInfoInterface {
	private static final Logger logger = LoggerFactory.getLogger(PayInfoServiceImpl.class);


    /**
     * 更新支付信息
     */
	@Override
	public String updatePayinfo(String business, String type) throws Exception {
		logger.info("updatePayinfo====更新开始business================" + business);
		logger.info("updatePayinfo====更新开始type===================="+type);
		List<Map<String,Object>> list= ServiceXmlUtils.xmlElements(business);
		StringBuffer rs=new StringBuffer("");
		if (list!=null && list.size()>0) {
			IBFSApiService bFSApiService = (IBFSApiService) ApplicationContextAccessor.getBean("bFSApiService");
			if (type!=null && type.equals("2")) { //type:2 需要修改或者作废的， op_type：1打回修改，2打回作废
				rs.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>");
				for (int i = 0; i < list.size(); i++) {
					boolean flag=true;
					StringBuffer resultMsg=new StringBuffer("");
					rs.append("	<row>");
					Map<String,Object> map=list.get(i);
					if (map.get("fls_num")==null || map.get("fls_num").equals("")) {
						flag=false;
						resultMsg.append("fls_num空");
					}else {
						rs.append("<fls_num>").append(map.get("fls_num").toString()).append("</fls_num>");
					}

					if (map.get("res_msg")==null || map.get("res_msg").equals("")) {
						flag=false;
						resultMsg.append("res_msg空");
					}
					if (map.get("op_type")==null || map.get("op_type").equals("")) {
						flag=false;
						resultMsg.append("op_type空");
						//1打回修改 2打回作废
					}else if (!map.get("op_type").equals("1") && !map.get("op_type").equals("2")) {
						flag=false;
						resultMsg.append("op_type错误");
					}
					if (flag) {
						Boolean rn=false;

						if(map.get("op_type").equals("1")){ //1打回修改
							//修改前先清空
							bFSApiService.clearPayInfo(Long.valueOf(map.get("fls_num").toString()));
							InfBfsPayDTO payDto = new InfBfsPayDTO();
							payDto.setId(Long.valueOf(map.get("fls_num").toString()));
							payDto.setMessage(map.get("res_msg").toString());
							MessageDTO messagedto = bFSApiService.rejectUpdate(payDto);
							rn = messagedto.isSuccess();
						}else if(map.get("op_type").equals("2")){ //2打回作废
							InfBfsPayDTO payDto = new InfBfsPayDTO();
							payDto.setId(Long.valueOf(map.get("fls_num").toString()));
							payDto.setMessage(map.get("res_msg").toString());
							MessageDTO messagedto = bFSApiService.cancel(payDto);
							rn = messagedto.isSuccess();
						}

						if (flag && rn) {
							rs.append("<resultCode>").append("S").append("</resultCode>");
							rs.append("<resultMsg>").append("成功").append("</resultMsg>");

						}else {
							rs.append("<resultCode>").append("F").append("</resultCode>");
							rs.append("<resultMsg>").append("数据库保存错误").append("</resultMsg>");
						}
					}else{
						rs.append("<resultCode>").append("F").append("</resultCode>");
						rs.append("<resultMsg>").append(resultMsg).append("</resultMsg>");
					}
					rs.append("	</row>");
				}
				rs.append("</root>");
			}else{ //成功付款信息接口
				rs.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>");
				for (int i = 0; i < list.size(); i++) {
					boolean flag=true;

					StringBuffer resultMsg=new StringBuffer("");
					rs.append("	<row>");
					Map<String,Object> map=list.get(i);
					if (map.get("fls_num")==null || map.get("fls_num").equals("")) {
						flag=false;
						resultMsg.append("fls_num空");
					}else {
						rs.append("<fls_num>").append(map.get("fls_num").toString()).append("</fls_num>");
					}
					if (map.get("payer_accname")==null || map.get("payer_accname").equals("")) {
						flag=false;
						resultMsg.append("payer_accname空");
					}
					if (map.get("payer_acc")==null || map.get("payer_acc").equals("")) {
						flag=false;
						resultMsg.append("payer_acc空");
					}
					if (map.get("payer_bank")==null || map.get("payer_bank").equals("")) {
						flag=false;
						resultMsg.append("payer_bank空");
					}
					if (map.get("bif_code")==null || map.get("bif_code").equals("")) {
						flag=false;
						resultMsg.append("bif_code空");
					}
					if (map.get("pay_money")==null || map.get("pay_money").equals("")) {

						flag=false;
						resultMsg.append("pay_money空");
					}else{
						try {
							double d=Double.parseDouble(map.get("pay_money").toString());
						} catch (Exception e) {
							// TODO: handle exception
							BaseLogUtils.error(logger, "-", "异常", e);
							flag=false;
							resultMsg.append("pay_money格式错误");
						}

					}
					if (map.get("pay_date")==null || map.get("pay_date").equals("")) {
						flag=false;
						resultMsg.append("pay_date空");
					}else if(map.get("pay_date").toString().length()!=10){
						flag=false;
						resultMsg.append("pay_date格式错误");
					}
					if (flag) {
						Boolean rn=false;
						InfBfsPayDTO payDto = new InfBfsPayDTO();
						payDto.setId(Long.valueOf(map.get("fls_num").toString()));
						payDto.setPayerAccname(map.get("payer_accname").toString());
						payDto.setPayerAcc(map.get("payer_acc").toString());
						payDto.setPayerBank(map.get("payer_bank").toString());
						payDto.setBifCode(map.get("bif_code").toString());
						payDto.setPayMoneyReal(DecimalUtils.convertYuanToFen(Double.valueOf(map.get("pay_money").toString())));
						payDto.setPayDate(DateUtils.formatStringToDate(map.get("pay_date").toString(), "yyyy-MM-dd"));
						MessageDTO messagedto = bFSApiService.paySuccess(payDto);
						rn = messagedto.isSuccess();

						if (flag && rn) {
							rs.append("<resultCode>").append("S").append("</resultCode>");
							rs.append("<resultMsg>").append("成功").append("</resultMsg>");

						}else {
							rs.append("<resultCode>").append("F").append("</resultCode>");
							rs.append("<resultMsg>").append("数据库保存错误").append("</resultMsg>");
						}
					}else{
						rs.append("<resultCode>").append("F").append("</resultCode>");
						rs.append("<resultMsg>").append(resultMsg).append("</resultMsg>");
					}
					rs.append("	</row>");
				}
				rs.append("</root>");
			}
		}else {
			return "解析错误";
		}
		return rs.toString();
	}
 }